Обновить

Part 1: “Everything you wanted to know and were afraid to ask about I2P»

Время на прочтение 7 min
Количество просмотров 80K
I have used I2P for quite some time and read all the articles about this network available on the Russian-language part of the Internet, but not one of them provides comprehensive knowledge about it. Taking into account the wishes of people in previous publications about I2P, I started translating the official source.
Due to the large amount of information, I will post translations in parts.

If anyone is really interested in this, please, under the “spoiler”».

This is not enough* art translation, I apologize if the meaning was distorted somewhere.
Send amendments and corrections in PM.

Official source: i2p2.de

Table of contents:
Part 1: “Everything you wanted to know and were afraid to ask about I2P»
Part 2: Tunnel magic, NetDB and protocol juggling
Part 3: Digital Garlic

Introduction


I2P is a scalable, self-organizing network that distributes packets between anonymous network layers, in which any number of applications can run, while maintaining a high level of security and anonymity. Each of these applications, on their own, can be anonymous and have their own network management capabilities without having to worry about properly managing free, distributed, and asynchronous routing. I2P allows them to mix (hide - approx. lane.) your work among a large number of already existing anonymous users working on the network.
Applications can use all the capabilities of the regular Internet, while combining anonymous web surfing, web hosting, anonymous chat, file transfer, blogging and other features that will be added later.
  1. Web surfing using any browser that supports proxy work.
  2. Chat: IRC, Jabber, I2P-Messenger.
  3. File sharing:
    Torrents: I2PShark, Robert, Imule, PyBit, I2P-bt
    Transfer directly between PCs: I2Phex
  4. E-mail: susimail and I2P-Bote.
  5. Blog: Using Syndie.
  6. Distributed data storage, save your data using cloud Tahoe-LAFS over I2P.
  7. Newsgroups using any reader that supports proxies.


Unlike websites hosted on the Freenet and GNUnet distribution networks, sites hosted on I2P are fully interactive - there are traditional web services: search engines, message boards, blogs with the ability to comment.

With all these anonymous applications, I2P takes on the role of "Charon"» (The one who transported the souls of the dead across the river in Greek mythology) — applications communicate that they want to send some data to an address represented by a cryptographic identifier (This is the destination) and I2P makes sure that the data is delivered secretly and anonymously. I2P is able to distribute packets so that information is transmitted as anonymously and reliably as possible through several streams, over TCP. At the same time, based on the algorithm, maximum throughput and minimum delays are ensured.
Several simple SOCKS proxies are available to link the existing internet to I2P, their capabilities have been limited as many sites tend to pose an anonymity threat and put the user at risk.
The only safe way is to fully process applications to ensure proper operation, we provide a number of APIs that can be used to improve the network experience (This apparently means working with the Internet in both directions - approx. lane.).

I2P is not a research, academic, commercial or government project. It is a collaborative effort between engineers to do whatever is necessary to provide a sufficient level of anonymity for those who need it. Active development has been going on since the beginning of 2003 and has occupied all the time of the developers; there is also a special group consisting of participants from all over the world, which also participated in the development. All I2P source code is open source and freely available on the website, most of the code is in the public domain, although several cryptographic procedures are used under the BSD license.
The people working on I2P do not control what people do in the client applications, and there are several applications available under the GPL license (I2PTunnel, susimail, I2PSnark, I2P-Bote, I2Phex and others.).
I2P funding comes exclusively from donations, and is not subject to taxes (oh, what a waste), since many developers themselves are anonymous.

Principle of operation



Review


To understand how an I2P network works, it is important to understand a few key concepts.:
First, I2P makes a strict separation between the software participating in the network (the "router") and the anonymous ends ("targets") associated with individual applications.
When I2P is used it is clearly visible, but what is it hiding? It hides information about what the user is currently doing (if anything at all), as well as whether the user is connected to a specific router. End users typically have multiple local addresses on the router - for example, one proxy for IRC servers, another to support a custom anonymous web server ("eepsite"), another for I2Phex for example, a fourth for torrents, etc..

The second important aspect to understand the work is the concept of the “tunnel”. A tunnel is a directed path through an explicitly selected list of routers. Multi-layer encryption is used, so each router can only decrypt one layer. The decrypted information contains the IP of the next router, along with the encrypted information that will be forwarded. Each tunnel has a starting point (the first router, also known as a "gateway") and an end point. Messages can only be sent one way. To receive the return message, another tunnel is required.

image

There are two types of tunnel: "outgoing" tunnels send messages from the tunnel creator, while "incoming" tunnels send a message back to the tunnel creator. The combination of these two tunnels allows users to send messages to each other. The sender (“Alice” in the image above) establishes an outgoing tunnel, while the receiver (“Bob” in the picture) creates an incoming tunnel. The gateway in the incoming tunnel can receive messages from other users and forward them to the endpoint (in this case "Bob"»).
The endpoint of the outgoing tunnel will need to send a message to the gateway in the incoming tunnel. To do this, the sender (“Alice”) adds instructions to the encrypted message. Once the outgoing tunnel endpoint decrypts the message, it will be instructed to forward the message to the correct incoming gateway (the "Bob" gateway).»).

The third important point to understand is the NetDB network database. Several algorithms designed to exchange network metadata. There are two types of metadata: "routerInfo" and "leaseSets"»:
routerInfo gives the information about routers needed to communicate between private routers (their public keys, addresses, etc.), while leaseSet gives routers the information needed to communicate between specific points.
LeaseSet contains a block of information "Lease". Each field defines a tunnel of gateways that allows it to reach the recipient. Full information contained in Lease:
Incoming gateway for a tunnel that allows it to reach the recipient.
Time when the tunnel became obsolete.
A pair of public keys to be able to encrypt messages (for sending through the tunnel and for the recipient at the destination).

Routers forward their routerInfo to netDb directly, and leaseSets are forwarded through the outbound tunnel (leaseSets should be sent anonymously to avoid correlating a router with its leaseSets).
We can combine the above concepts to create a successful network.

To create her own incoming and outgoing tunnels, Alice searches netDb to collect routerInfo. Thus, she collects lists of peers that she can use as Hop (Intermediate Points) in her tunnels. It can send a first hop message requesting a tunnel and ask the router to send a tunnel request before the tunnel is built.

image

When Alice wants to send a message to Bob, she first searches netDb to find Bob's leaseSet and obtain information about Bob's current incoming tunnels. She then selects one of her outgoing tunnels and sends a message down it with instructions for the outgoing tunnel endpoint to forward the message to one of Bob's incoming tunnel gateways..
When an endpoint in the outbound tunnel receives these instructions, it transmits a request message and when Bob's inbound tunnel gateway receives the request, it is forwarded down the tunnel to Bob's router.
If Alice wants Bob to reply to a message, she must pass the instruction explicitly as part of the message itself. This can be done by creating a higher layer, which is created in the threading library. Alice can also improve response time by including her latest leaseSet in the message so that Bob doesn't have to do a netDb lookup for the call when he decides to respond, but this is not necessary.

image

While the tunnels themselves have multi-layer encryption to prevent unauthorized access to peers within the network (the "transport layer" is encrypted itself to prevent unauthorized access to network participants).
It is also necessary to add an additional layer of encryption to hide the message from the outgoing to the tunnel endpoint and the incoming tunnel gateway. This "honest encryption" allows Alice's router to wrap multiple messages into one "garlic message" (this is the fourth aspect), encrypted along with the public key, so that the man in the middle cannot determine the number of messages and what they contain..
For a typical connection between Alice and Bob, the message will be encrypted with the public key published in Bob's leaseSet, allowing the encrypted message to be read on Bob's router without giving away the public key

Another important fact. One thing to keep in mind is that I2P is entirely message based, and that some messages may get lost along the way.
Applications on an I2P network may use their own interface to communicate and take care of their own transmission control and reliability, but most applications can work adequately using standard libraries for data transmission on an i2p network.
Tags:
Hubs:
Всего голосов 65: ↑60 и ↓5 +55
Комментарии 21
+21

Comments 21

Thank you for undertaking to translate texts via I2P! It's probably worth sending the transfer to I2P website, to supplement the Russian language section with it.

Please add a link to the original (I suspect, This).

I would like to hear about the node naming system in I2P: Base32, DNS, etc. In particular, is it possible to save a constant Base32 node? (This is exactly what I was afraid to ask about I2P».)

You can't just write an article about I2P and not mention a word about Tor. For example, I2P is better suited for torrents, and TOR is better for accessing regular sites. Is I2P rightly considered a more decentralized system than TOR? Both systems allow you to create hidden sites; How stable are these sites and how difficult (or possible) is it to forcibly stop accessing them? It would be interesting to properly compare these two systems (would warrant a separate article).

It is also worth mentioning the operating system tails, designed to increase security when using I2P or TOR.

I would like to say that the I2P implementation is written in Java. Some of the criticism of I2P is based on the fact that Java is not the best choice for anonymous systems. The source codes for the main implementation of the Java machine are closed. This causes dissatisfaction on the part of users who are seriously concerned about their security. I2P leaves them with an unpleasant choice: trust the main closed-source implementation or use a third-party implementation, which risks degrading performance..

In light of recent events, the question arises: how resistant is I2P to blocking by authorities? In this regard, it seems to me that TOR users are easier to detect and block (which has already been done in several countries, in Russia similar measures are being discussed). How difficult is it to hide the fact of using I2P??
Considering that this is a translation and all my existing knowledge is emphasized from personal experience and articles that have already taken place. I won't be able to answer all these questions before I finish translating the official documentation.
Then, when this is done, we can try to conduct tests and analyze, all I can do for now is just translate.
Yes, you guessed it, this is exactly the original, now I’ll add it and think about how to put it in the official Russian-language section.
The base32 address is just a hash of the main (full) record of the destination (the anonymous target of the receiving tunnel). The destination consists of two public keys (and possibly a certificate). The owner of the private keys controls this tunnel and therefore the base32 address.

Why do you need to talk about Tor in the translation of I2P documentation? And then, doesn’t anyone else know about him? And their comparison has been on the site for a long time.

We don’t have I2P in Java for you.

All public networks (opennet) are equally vulnerable to blocking and de-anonymizing actions by a fairly organized and resource-rich party, as experts have been saying in vain for many years. F2F networks (darknet) are much better, but under the conditions of the Great Firewall of China they suck.
All public networks (opennet) are equally vulnerable to blocking and de-anonymizing actions by a sufficiently organized and resource-rich party

Provided that the traffic is properly masked, the detection problem comes down to obtaining a list of IP addresses of network hosts. The list of IP addresses of all servers in the TOR network, including intermediate nodes, is publicly available. A complete list of I2P network IP addresses is not maintained, as far as I know.

F2F networks (darknet) are much better

Aren't sites hosted on I2P and TOR part of the darknet? Please clarify what the fundamental difference is and why F2F networks are better.
The complete list of nodes is obtained by combining partial lists of nodes obtained from several netDb participants by extensive queries. It is not necessary to block everything entirely; if you randomly select participants to build tunnels, searching for working peers among non-working ones will take considerable time. In addition, the initial list of nodes at startup is downloaded from a small number of known servers in clear text. Of course, the ban on connecting to them can be bypassed via a secure channel, if there is one, but this is done manually.

However, these are all technical details. If we have an open network, in which any user who has installed a client can become a member, by definition, this can also be done by dummy nodes, which can later be used to collect data both within the network (monitoring data flows, comparing them and etc.) and externally (IP addresses, etc.). It doesn't depend on technology. Participants in a Friend-to-Friend topology do not disclose their participation in the network to anyone other than their immediate peers. To block a connection, you need to somehow find out about either one or the other participant. This is darknet in technical terms. And under the general concept of a “hidden network” you can, if you wish, include not only websites in Tor and I2P, but also a regular forum with closed registration and access via https.
As far as I understand, the essence of Friend-to-Friend is that direct connections (that is, connections that expose the second party's IP) are only possible between users who trust each other. Information is transmitted only through the chain of “friends”».

This will complicate the capture of network users, but will not prevent it. If the observing party manages to introduce at least one fake user into such a network, through him you can get all his friends, take them “on the hook”, through them get to their friends, etc. By the way, if it comes to accusations, then the friends will it is more difficult to refute the connection and complicity than to random strangers.

On the other hand, how can a user determine who is considered a friend in such a network? If you trust only people you know in real life, then the network will have few direct connections and will most likely consist of several connected components. New users who do not have friends among old users will not be able to connect.

Regardless, the idea is great. Is it technically possible to make such an option in I2P or TOR??
“Trust” can mean a lot, depending on what network will be used and for what, but even the simplest option “familiar from the computer environment” makes monitoring from inside the network much more difficult compared to open access, where everything is in full view.

Information, in the general case, is not “transmitted only along a chain”; no one has canceled the anonymization of network participants relative to each other. It is a way of connecting to a network, not a way of transmitting data on a network. Observing who is making connections to whom is obviously possible within one state, but it is difficult if there are connections across the border (in this case, several small unconnected groups are even better).

On social networks, people are also not directly connected with the whole world, but they cover it entirely.

The security of I2P and Tor is based, among other things, on the selection of random intermediate nodes from many known to the client, therefore, publicity is inherent in them from the very beginning. You can hide connections between users and the client, but this does not directly apply to these networks..
What does core java implementation mean? Starting from version 7, it is openjdk with open source that is considered reference. Basic in the sense that it is the most common among Windows users? So “users who are seriously concerned about their security” if they have already figured out Tor and I2P, then maybe they should be aware of openjdk?
Openjdk and don't mislead people :-)
I didn't know that OpenJDK was reference. Thank you for saying!
A UFO flew in and published this inscription here
Well, they say there’s a lot there child porn various content, and drug dealers, but of course I haven’t personally checked this.
rus.i2p/ wiki in Russian in I2P
tracker2.postman.i2p/ torrent tracker in I2P
torrent.repo.i2p/ another torrent tracker
hideblogs.i2p/ blogs
chess.i2p/ chess championship among TOR and I2P regulars
hiddenchan.i2p/ anonymous imageboard in Russian in I2P
gop4u4wtlludld6zxergsa6yllduwppjfvo3jxh4ltzmcu7hr3uq.b32.i2p/ TorChan mirror in I2P
( zw3crggtadila2sg.onion/imageboard/ TorChan himself )
Opened Eclipse.
Well, where are all these complex multi-module programs, automatic context substitution, template generators from UI and code from templates, dynamic compilation and testing, debuggers and built-in version control systems??
Empty.
Closed Eclipse.
forum.i2p - official forum. It's working intermittently now for some reason..
forum.rus.i2p - Russian forum, works much faster.
freezone.i2p - an engine similar to Khabrovsk

There is IRC; you can read about the connection method in the documentation and in the client itself. There is a channel #ru with the encoding koi8-r.
It's a good start, but there are a ton of stylistic errors and a number of typos. Maybe you should carefully read the article before publishing? I am ready to provide assistance in proofreading and editing, provided that until the final readiness of the text we will work on something more designed for joint editing of texts than Habr, namely a wiki engine (we have our own, if that happens). Upon reaching readiness, at least for habr, at least for the office. i2p website.
Googledocs or what?…
A good start, but the translation leaves much to be desired. The text there is not simple, but, in my opinion, the first paragraph

I2P is a scalable, self organizing, resilient packet switched anonymous network layer, upon which any number of different anonymity or security conscious applications can operate. Each of these applications may make their own anonymity, latency, and throughput tradeoffs without worrying about the proper implementation of a free route mixnet, allowing them to blend their activity with the larger anonymity set of users already running on top of I2P.

even with my meager knowledge of English. language translated somewhere like this:

I2P is a scalable, self-organizing, fault-tolerant packet-switched anonymous network layer that can host any number of different anonymous or security-enabled applications. Any such application is able to set its own anonymity, latency, and bandwidth ratios without having to worry about properly implementing a loose mesh network with routing that allows them to mix their own network activity with the activity of the large number of users already running on top of I2P.

but not

I2P is a scalable, self-organizing, packet-distributing network across anonymous network layers on which any number of different anonymous or secure aware applications can operate, each of these applications can be anonymous, have their own latency and bandwidth issues, without having to worry about properly implementing a free distributed , asynchronous routing, allowing them to mix (hide - approx. lane) their activities among the large number of existing anonymous users already working on the network.

You, like me, still need to learn. And what you posted is not worthy of translation, which can be posted anywhere. Easier to translate again.

I apologize for the truth.
I'll correct myself:
mixnet is not a mixed network, it is a “mixing network”, a “mix network”. There is no established translation in Russian, so they write something like this:

blah blah blah “mix network” blah blah blah
Only “...can run on top of any number of different applications that require anonymity or security” and “...can choose the right balance of anonymity, latency and throughput without worrying...”. Homogeneous members and conscious, and at tradeoffs
I just looked in Lingvo.Pro, that:
security - conscious terminal - terminal with security features

maybe after all
security conscious application - an application with security features (self-protected application)?
Yes, to be honest, I have no idea. Since I2P provides anonymity and security of transmission, it is logical to build applications on top of it that need anonymity and/or security. “Application” here is in a general sense, as a “service”, and not a specific technical implementation.
Only full-fledged users can leave comments. Sign in, Please.